home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Languages / PowerMacOberon 1.2 / Dialogs / MyUI.Mod (.txt) < prev    next >
Oberon Text  |  1995-07-10  |  46KB  |  1,084 lines

  1. Syntax10.Scn.Fnt
  2. InfoElems
  3. Alloc
  4. Syntax10.Scn.Fnt
  5. StampElems
  6. Alloc
  7. 10 Jul 95
  8. "Title": MyUI
  9. "Author": Christoph Steindl (CS)
  10. "Abstract": MyUI provides a user interface for the compile commands such as Compiler.Compile
  11.     and Folds.Compile, for Edit.Get and Edit.Set, for Edit.Print and for Edit.Search, Edit.Replace,
  12.     Edit.ReplaceAll and Edit.ClearReplaceBuffer
  13. "Keywords": user interface, Compiler.Compile, Folds.Compile, Edit.Get, Edit.Set, Edit.Print,
  14.     Edit.Search, Edit.Replace, Edit.ReplaceAll, Edit.ClearReplaceBuffer
  15. "Version": 1
  16. "From":  20.12.94 14:01:53
  17. "Until": 
  18. "Changes": no changes
  19. "Hints": 
  20.     Dialog.Open Insert.Dlg
  21.     Dialog.Edit Compiler.Dlg
  22.     Dialog.Open Compiler.Dlg
  23.     Dialog.Edit GetSet.Dlg
  24.     Dialog.Open GetSet.Dlg
  25.     Dialog.Edit Print.Dlg
  26.     Dialog.Open Print.Dlg
  27.     Dialog.Edit Search.Dlg
  28.     Dialog.Open Search.Dlg
  29. Syntax10i.Scn.Fnt
  30. StampElems
  31. Alloc
  32. 10 Jul 95
  33. Syntax10b.Scn.Fnt
  34. ParcElems
  35. Alloc
  36. FoldElems
  37. Syntax10.Scn.Fnt
  38. Syntax10b.Scn.Fnt
  39. CONST
  40.         OptionChar* = "/";
  41.         PrintOptionsFile* = "PrintOptions";
  42.         eps = 1.0D-9; eps0 = 0.5D-9;
  43. Syntax10.Scn.Fnt
  44. FoldElems
  45.         StyleElem = POINTER TO StyleElemDesc;
  46.         StyleElemDesc = RECORD
  47.             styleElem: StyleElems.Parc;
  48.             next: StyleElem
  49.         END;
  50.         Operation = ARRAY 10 OF CHAR;
  51.         Var = POINTER TO VarDesc;
  52.         VarDesc = RECORD
  53.             name: ARRAY 32 OF CHAR;
  54.             value: LONGREAL;
  55.             next: Var
  56.         END;
  57. Syntax10.Scn.Fnt
  58.         vwr: Viewers.Viewer; selbeg, selend: TextFrames.Location;    (* for StoreSelection and RestoreSelection *)
  59.         styleElems: StyleElem;
  60.         p: Dialogs.Panel; o: Dialogs.Object;
  61.         command: ARRAY 32 OF CHAR; par: Oberon.ParList;
  62.         oldLog, newLog: Texts.Text;
  63.         w: Texts.Writer;
  64.         res-: INTEGER;
  65.         doSearch: BOOLEAN;
  66.         oldValue, value: LONGREAL; (* global variables for Calc.Dlg *)
  67.         commaPos: LONGREAL; (* <= 1 if a comma has been entered (i.e. right of comma) *)
  68.         oldOp, op: Operation;
  69.         newNumber: BOOLEAN;
  70.         vars: Var;
  71. Syntax10.Scn.Fnt
  72. common procedures
  73. Syntax10.Scn.Fnt
  74. FoldElems
  75. Syntax10b.Scn.Fnt
  76.     PROCEDURE Comp;
  77.         VAR
  78.         t: Texts.Text;
  79.         opt: ARRAY 20 OF CHAR; res: INTEGER; beg, end, time: LONGINT;
  80.         findPC: BOOLEAN; i, j: INTEGER;
  81.         PROCEDURE Do;
  82.             VAR ch: CHAR; error: BOOLEAN; fbeg, fend, ftime, breakpc: LONGINT;
  83.             scanner, fs: Texts.Scanner; sourceR: Texts.Reader; line: INTEGER;  ft: Texts.Text;  fw: Texts.Writer;
  84.         BEGIN
  85.             error := FALSE;
  86.             Texts.OpenScanner(scanner, t, beg); Texts.Scan(scanner);
  87.             WHILE (scanner.class IN {Texts.Name, Texts.String}) & (Texts.Pos(scanner) - scanner.len <= end) & ~error DO
  88.                 Texts.OpenWriter(w);
  89.                 Texts.WriteString(w, scanner.s);
  90.                 line := scanner.line; opt[j] := 0X; i := j;
  91.                 Texts.Scan(scanner);
  92.                 IF (scanner.line = line) & (scanner.class = Texts.Char) & (scanner.c = OptionChar) THEN
  93.                     ch := scanner.nextCh;
  94.                     WHILE ((ch >= "0") & (ch <= "9") OR (ch >= "a") & (ch <= "z")) & (i < LEN(opt) - 1) DO
  95.                         opt[i] := ch; INC(i);
  96.                         IF ch = "f" THEN findPC := ~findPC END;
  97.                         Texts.Read(scanner, ch)
  98.                     END ;
  99.                     scanner.nextCh := ch;
  100.                     Texts.Scan(scanner)
  101.                 END;
  102.                 opt[i] := 0X;
  103.                 par.frame := Oberon.Par.frame; par.vwr := Oberon.Par.vwr;
  104.                 IF findPC THEN
  105.                     LOOP
  106.                         Oberon.GetSelection(ft, fbeg, fend, ftime);
  107.                         IF ftime >= 0 THEN
  108.                             Texts.OpenScanner(fs, ft, fbeg); Texts.Scan(fs);
  109.                             IF fs.class = Texts.Int THEN breakpc := fs.i; EXIT END
  110.                         END;
  111.                         Texts.WriteString(fw, "  pc not selected"); Texts.WriteLn(fw);
  112.                         Texts.Append(Oberon.Log, fw.buf); error := TRUE; RETURN
  113.                     END;
  114.                     Texts.OpenReader(sourceR, t, beg);
  115.                     Compiler.Module(sourceR, opt, breakpc, Oberon.Log, error);
  116.                 ELSE
  117.                     Texts.Write(w, OptionChar); Texts.WriteString(w, opt);
  118.                     Texts.Append(par.text, w.buf); Oberon.Call(command, par, FALSE, res)
  119.                 END
  120.             END
  121.         END Do;
  122.     BEGIN
  123.         InitPar; i := 0;
  124.         IF On ("idx") THEN opt[i] := "x"; INC(i) END; IF On ("type") THEN opt[i] := "t"; INC(i) END;
  125.         IF On ("nil") THEN opt[i] := "n"; INC(i) END; IF On ("init") THEN opt[i] := "p"; INC(i) END;
  126.         IF On ("assert") THEN opt[i] := "s"; INC(i) END;
  127.         IF On ("pc") THEN findPC := TRUE; opt[i] := "f"; INC(i) ELSE findPC := FALSE END;
  128.         opt[i] := 0X; j := i;
  129.         IF On ("mrs") THEN 
  130.             Oberon.GetSelection(t, beg, end, time); 
  131.             IF findPC THEN 
  132.                 o := p.NamedObject("tpc"); t := o(DialogTexts.Item).GetText(); o(DialogTexts.Item).SetSelection(0, t.len)
  133.             END;
  134.             IF time >= 0 THEN Do END 
  135.         END;
  136.         IF findPC THEN 
  137.             o := p.NamedObject("tpc"); t := o(DialogTexts.Item).GetText(); o(DialogTexts.Item).SetSelection(0, t.len)
  138.         END;
  139.         IF On ("marked") THEN 
  140.             Texts.Write(w, "*"); Texts.Write(w, OptionChar); Texts.WriteString(w, opt); 
  141.             Texts.Append(par.text, w.buf); par.vwr := Oberon.MarkedViewer(); 
  142.             IF (par.vwr # NIL) & (par.vwr.dsc # NIL) & (par.vwr.dsc.next IS TextFrames.Frame) THEN 
  143.                 par.frame := par.vwr.dsc.next(TextFrames.Frame)
  144.             ELSE
  145.                 par.frame := NIL
  146.             END;
  147.             Oberon.Call(command, par, FALSE, res)
  148.         END;
  149.         IF On ("list") THEN
  150.             o := p.NamedObject("files"); t := o(DialogTexts.Item).GetText();
  151.             IF t.len > 0 THEN beg := 0; end := t.len; Do END
  152.         END;
  153.         IF findPC THEN o := p.NamedObject("tpc"); o(DialogTexts.Item).RemoveSelection END
  154.     END Comp;
  155.     PROCEDURE Compile*;
  156.     BEGIN command := "Compiler.Compile"; Comp
  157.     END Compile;
  158.     PROCEDURE FoldsCompile*;
  159.     BEGIN command := "Folds.Compile"; Comp
  160.     END FoldsCompile;
  161. Syntax10.Scn.Fnt
  162. Commands for the dialogue GetSet.Dlg
  163. Syntax10.Scn.Fnt
  164. Syntax10b.Scn.Fnt
  165. FoldElems
  166. Syntax10.Scn.Fnt
  167. FoldElems
  168. Syntax10.Scn.Fnt
  169.             VAR t: Texts.Text;
  170.         BEGIN
  171.             t := o(DialogTexts.Item).GetText(); Texts.Delete(t, 0, t.len);
  172.             Texts.WriteInt(w, l, 0); Texts.Append(t, w.buf)
  173.         END WriteNumber;
  174. Syntax10.Scn.Fnt
  175.             VAR t: Texts.Text; i: INTEGER;
  176.         BEGIN
  177.             t := o(DialogTexts.Item).GetText(); Texts.Delete(t, 0, t.len);
  178.             i := 0; 
  179.             WHILE s[i] # 0X DO Texts.Write(w, s[i]); INC(i) END;
  180.             Texts.Append (t, w.buf)
  181.         END WriteName;
  182.         VAR o: Dialogs.Object;
  183.         PROCEDURE WriteNumber(o: Dialogs.Object; l: LONGINT);
  184.         PROCEDURE WriteName(o: Dialogs.Object; s: ARRAY OF CHAR);
  185.     BEGIN
  186.         p := Dialogs.cmdPanel;
  187.         ChangeValue ("alternate", FALSE); ChangeValue ("nopagenr", FALSE);
  188.         ChangeValue ("nopagenr1", FALSE); ChangeValue ("Romannum", FALSE);
  189.         ChangeValue ("draft", FALSE); 
  190.         o := p.NamedObject("tfirstpage"); WriteNumber(o, 0);
  191.         o := p.NamedObject("tfirstpage"); WriteNumber(o, 0);
  192.         o := p.NamedObject("copies"); WriteNumber(o, 1);
  193.         o := p.NamedObject("font"); WriteName(o, "");
  194.         ChangeValue ("nohdr", FALSE); ChangeValue ("defhdr", TRUE);
  195.         ChangeValue ("header", FALSE); ChangeValue ("custom1", FALSE);
  196.         o := p.NamedObject("thdr"); WriteName(o, "");
  197.         ChangeValue ("default1", TRUE); ChangeValue ("custom2", FALSE);
  198.         o := p.NamedObject("postxtleft"); WriteNumber(o, 150);
  199.         o := p.NamedObject("postxtbottom"); WriteNumber(o, 150);
  200.         o := p.NamedObject("txtwidth"); WriteNumber(o, 1650);
  201.         o := p.NamedObject("txtheight"); WriteNumber(o, 2600);
  202.         o := p.NamedObject("poshdrleft"); WriteNumber(o, 150);
  203.         o := p.NamedObject("poshdrbottom"); WriteNumber(o, 2800);
  204.         o := p.NamedObject("hdrwidth"); WriteNumber(o, 1650);
  205.         ChangeValue ("default2", TRUE); ChangeValue ("fromto", FALSE); ChangeValue ("all", TRUE);
  206.         o := p.NamedObject("from"); WriteNumber(o, 0);
  207.         o := p.NamedObject("to"); WriteName(o, "");
  208.     END SetDefaultOptions;
  209. Syntax10.Scn.Fnt
  210. FoldElems
  211.         VAR r: Files.Rider; f: Files.File; b: BOOLEAN; o: Dialogs.Object;
  212.             PROCEDURE WriteNumber(o: Dialogs.Object);
  213.                 VAR t: Texts.Text; l: LONGINT;
  214.             BEGIN
  215.                 Files.ReadLInt(r, l);
  216.                 t := o(DialogTexts.Item).GetText(); Texts.Delete(t, 0, t.len);
  217.                 Texts.WriteInt(w, l, 0); Texts.Append(t, w.buf)
  218.             END WriteNumber;
  219.             PROCEDURE WriteName(o: Dialogs.Object);
  220.                 VAR t: Texts.Text; ch: CHAR;
  221.             BEGIN
  222.                 t := o(DialogTexts.Item).GetText(); Texts.Delete(t, 0, t.len);
  223.                 Files.Read(r, ch); 
  224.                 WHILE ch # 0X DO Texts.Write(w, ch); Files.Read(r, ch) END;
  225.                 Texts.Append(t, w.buf)
  226.             END WriteName;
  227.     BEGIN
  228.         f := Files.Old(PrintOptionsFile);
  229.         IF f # NIL THEN
  230.             p := Dialogs.cmdPanel; Files.Set(r, f, 0);
  231.             Files.ReadBool (r, b); ChangeValue ("alternate", b); Files.ReadBool (r, b); ChangeValue ("nopagenr", b);
  232.             Files.ReadBool (r, b); ChangeValue ("nopagenr1", b); Files.ReadBool (r, b); ChangeValue ("Romanum", b);
  233.             Files.ReadBool (r, b); ChangeValue ("draft", b);
  234.             o := p.NamedObject("tfirstpage"); WriteNumber(o); o := p.NamedObject("copies"); WriteNumber(o);
  235.             o := p.NamedObject("font"); WriteName(o);
  236.             Files.ReadBool (r, b); ChangeValue ("nohdr", b); Files.ReadBool (r, b); ChangeValue ("defhdr", b);
  237.             Files.ReadBool (r, b); ChangeValue ("header", b);
  238.             o := p.NamedObject("thdr"); WriteName(o);
  239.             Files.ReadBool (r, b); ChangeValue ("custom1", b); Files.ReadBool (r, b); ChangeValue ("default1", b);
  240.             o := p.NamedObject("postxtleft"); WriteNumber(o); o := p.NamedObject("postxtbottom"); WriteNumber(o);
  241.             o := p.NamedObject("txtwidth"); WriteNumber(o); o := p.NamedObject("txtheight"); WriteNumber(o);
  242.             Files.ReadBool (r, b); ChangeValue ("custom2", b); Files.ReadBool (r, b); ChangeValue ("default2", b);
  243.             o := p.NamedObject("poshdrleft"); WriteNumber(o); o := p.NamedObject("poshdrbottom"); WriteNumber(o);
  244.             o := p.NamedObject("hdrwidth"); WriteNumber(o);
  245.             Files.ReadBool (r, b); ChangeValue ("fromto", b); Files.ReadBool (r, b); ChangeValue ("all", b);
  246.             o := p.NamedObject("from"); WriteNumber(o); o := p.NamedObject("to"); WriteNumber(o)
  247.         ELSE SetDefaultOptions END;
  248.     END InitPrintDlg;
  249. Syntax10.Scn.Fnt
  250. FoldElems
  251.     VAR r: Files.Rider; f: Files.File;
  252.         PROCEDURE WriteNumber(o: Dialogs.Object);
  253.             VAR s: Texts.Scanner; t: Texts.Text; l: LONGINT;
  254.         BEGIN
  255.             t := o(DialogTexts.Item).GetText(); l := 0;
  256.             IF t.len > 0 THEN
  257.                 Texts.OpenScanner(s, t, 0); Texts.Scan(s); IF s.class = Texts.Int THEN l := s.i END
  258.             END;
  259.             Files.WriteLInt(r, l)        
  260.         END WriteNumber;
  261.         PROCEDURE WriteName(o: Dialogs.Object);
  262.             VAR rt: Texts.Reader; t: Texts.Text; ch: CHAR;
  263.         BEGIN
  264.             t := o(DialogTexts.Item).GetText();
  265.             Texts.OpenReader(rt, t, 0); Texts.Read(rt, ch);
  266.             WHILE ~rt.eot DO Files.Write(r, ch); Texts.Read(rt, ch) END;
  267.             Files.Write(r, 0X)        
  268.         END WriteName;
  269.     BEGIN
  270.         f := Files.New(PrintOptionsFile); Files.Set(r, f, 0);
  271.         p := Dialogs.cmdPanel;
  272.         o := p.NamedObject("alternate"); Files.WriteBool(r, o(DialogCheckBoxes.Item).on);
  273.         o := p.NamedObject("nopagenr"); Files.WriteBool(r, o(DialogCheckBoxes.Item).on);
  274.         o := p.NamedObject("nopagenr1"); Files.WriteBool(r, o(DialogCheckBoxes.Item).on);
  275.         o := p.NamedObject("Romannum"); Files.WriteBool(r, o(DialogCheckBoxes.Item).on);
  276.         o := p.NamedObject("draft"); Files.WriteBool(r, o(DialogCheckBoxes.Item).on);
  277.         o := p.NamedObject("tfirstpage"); WriteNumber(o);
  278.         o := p.NamedObject("copies"); WriteNumber(o);
  279.         o := p.NamedObject("font"); WriteName(o);
  280.         o := p.NamedObject("nohdr"); Files.WriteBool(r, o(DialogRadioButtons.Item).on);
  281.         o := p.NamedObject("defhdr"); Files.WriteBool(r, o(DialogRadioButtons.Item).on);
  282.         o := p.NamedObject("header"); Files.WriteBool(r, o(DialogRadioButtons.Item).on);
  283.         o := p.NamedObject("thdr"); WriteName(o);
  284.         o := p.NamedObject("custom1"); Files.WriteBool(r, o(DialogRadioButtons.Item).on);
  285.         o := p.NamedObject("default1"); Files.WriteBool(r, o(DialogRadioButtons.Item).on);
  286.         o := p.NamedObject("postxtleft"); WriteNumber(o);
  287.         o := p.NamedObject("postxtbottom"); WriteNumber(o);
  288.         o := p.NamedObject("txtwidth"); WriteNumber(o);
  289.         o := p.NamedObject("txtheight"); WriteNumber(o);
  290.         o := p.NamedObject("custom2"); Files.WriteBool(r, o(DialogRadioButtons.Item).on);
  291.         o := p.NamedObject("default2"); Files.WriteBool(r, o(DialogRadioButtons.Item).on);
  292.         o := p.NamedObject("poshdrleft"); WriteNumber(o);
  293.         o := p.NamedObject("poshdrbottom"); WriteNumber(o);
  294.         o := p.NamedObject("hdrwidth"); WriteNumber(o);
  295.         o := p.NamedObject("fromto"); Files.WriteBool(r, o(DialogRadioButtons.Item).on);
  296.         o := p.NamedObject("all"); Files.WriteBool(r, o(DialogRadioButtons.Item).on);
  297.         o := p.NamedObject("from"); WriteNumber(o);
  298.         o := p.NamedObject("to"); WriteNumber(o);
  299.         Files.Register(f)
  300.     END SaveOptions;
  301.     PROCEDURE SetDefaultOptions*;
  302.     PROCEDURE InitPrintDlg*;
  303.     PROCEDURE SaveOptions*;
  304.     PROCEDURE Print*;
  305.         VAR t: Texts.Text; o: Dialogs.Object; 
  306.     BEGIN
  307.         Texts.OpenWriter (w);
  308.         InitPar; Texts.WriteString(w, "QuickDraw * ");
  309.         IF On ("draft") THEN Texts.WriteString(w, "% ") END;
  310.         IF On ("alternate") THEN Texts.Write(w, OptionChar); Texts.WriteString(w, "a ") END;
  311.         IF On ("nopagenr") THEN Texts.Write(w, OptionChar); Texts.WriteString(w, "p n ") END;
  312.         IF On ("nopagenr1") THEN Texts.Write(w, OptionChar); Texts.WriteString(w, "p f ") END;
  313.         IF On ("Romannum") THEN Texts.Write(w, OptionChar); Texts.WriteString(w, "p r ") END;
  314.         o := p.NamedObject("tfirstpage"); t := o(DialogTexts.Item).GetText();
  315.         IF t.len > 0 THEN Texts.Write(w, OptionChar); Texts.WriteString(w, "p ");Texts.Save(t, 0, t.len, w.buf); Texts.WriteString(w, " ") END;
  316.         o := p.NamedObject("font"); t := o(DialogTexts.Item).GetText();
  317.         IF t.len > 0 THEN Texts.Write(w, OptionChar); Texts.WriteString(w, "f "); Texts.Save(t, 0, t.len, w.buf); Texts.Write(w, " ") END;
  318.         o := p.NamedObject("copies"); t := o(DialogTexts.Item).GetText();
  319.         IF t.len > 0 THEN Texts.Write(w, OptionChar); Texts.WriteString(w, "c "); Texts.Save(t, 0, t.len, w.buf); Texts.Write(w, " ") END;
  320.         IF On ("defhdr") THEN Texts.Write(w, OptionChar); Texts.WriteString(w, "h ") END;
  321.         IF On ("header") THEN         
  322.             Texts.Write(w, OptionChar); Texts.WriteString(w, "h "); Save ("thdr"); Texts.Write(w, " ")
  323.         END;
  324.         IF On ("custom1") THEN 
  325.             Texts.Write(w, OptionChar); Texts.WriteString(w, "m b "); 
  326.             Save ("postxtleft"); Texts.Write(w, " "); Save ("postxtbottom"); Texts.Write(w, " ");
  327.             Save ("txtwidth"); Texts.Write(w, " "); Save ("txtheight"); Texts.Write(w, " ")
  328.         END;
  329.         IF On ("custom2") THEN 
  330.             Texts.Write(w, OptionChar); Texts.WriteString(w, "m h "); Save ("poshdrleft"); Texts.Write(w, " ");
  331.             Save ("poshdrbottom"); Texts.Write(w, " "); Save ("hdrwidth"); Texts.Write(w, " ")
  332.         END;
  333.         IF On ("fromto") THEN 
  334.             Texts.Write(w, OptionChar); Texts.WriteString(w, "s ");
  335.             o := p.NamedObject("from"); t := o(DialogTexts.Item).GetText(); IF t.len > 0 THEN Texts.Save(t, 0, t.len, w.buf) END;
  336.             Texts.Write(w, " ");
  337.             o := p.NamedObject("to"); t := o(DialogTexts.Item).GetText(); IF t.len > 0 THEN Texts.Save(t, 0, t.len, w.buf) END
  338.         END; 
  339.         Call ("Edit.Print") 
  340.     END Print;
  341. Syntax10.Scn.Fnt
  342. Syntax10b.Scn.Fnt
  343. FoldElems
  344.     PROCEDURE Search*;
  345.         VAR res: INTEGER; t: Texts.Text; o: Dialogs.Object;
  346.     BEGIN
  347.         p := Dialogs.cmdPanel; o := p.NamedObject("search"); t := o(DialogTexts.Item).GetText();
  348.         o(DialogTexts.Item).SetSelection(0, t.len);
  349.         IF On ("folds") THEN Oberon.Call("FoldElems.Search", Oberon.Par, FALSE, res)
  350.         ELSE Oberon.Call("Edit.Search", Oberon.Par, FALSE, res)
  351.         END;
  352.         o(DialogTexts.Item).RemoveSelection;
  353.         doSearch := FALSE
  354.     END Search;
  355.     PROCEDURE Replace*;
  356.         VAR res: INTEGER; t: Texts.Text; o: Dialogs.Object; f: TextFrames.Frame;
  357.     BEGIN
  358.         f := XIn.FocusFrame(TRUE);
  359.         IF f # NIL THEN 
  360.             p := Dialogs.cmdPanel; 
  361.             IF doSearch THEN
  362.                 doSearch := FALSE;
  363.                 o := p.NamedObject("search"); t := o(DialogTexts.Item).GetText();
  364.                 o(DialogTexts.Item).SetSelection(0, t.len);
  365.                 IF On ("folds") THEN Oberon.Call("FoldElems.Search", Oberon.Par, FALSE, res)
  366.                 ELSE Oberon.Call("Edit.Search", Oberon.Par, FALSE, res)
  367.                 END;
  368.                 o(DialogTexts.Item).RemoveSelection;
  369.             END;
  370.             o := p.NamedObject("repl"); t := o(DialogTexts.Item).GetText();
  371.             IF t.len = 0 THEN 
  372.                 Oberon.Call("Edit.ClearReplaceBuffer", Oberon.Par, FALSE, res)
  373.             ELSE
  374.                 o(DialogTexts.Item).SetSelection(0, t.len)
  375.             END;
  376.             IF On ("all") THEN Oberon.Call("Edit.ReplaceAll", Oberon.Par, FALSE, res)
  377.             ELSE Oberon.Call("Edit.Replace", Oberon.Par, FALSE, res)
  378.             END;
  379.             o(DialogTexts.Item).RemoveSelection
  380.         END
  381.     END Replace;
  382.     PROCEDURE SearchReset*;
  383.     BEGIN doSearch := TRUE
  384.     END SearchReset;
  385. Syntax10.Scn.Fnt
  386. FoldElems
  387. PROCEDURE GetType*;
  388.         VAR t: Texts.Text; beg, end, time: LONGINT; r: Texts.Reader; type: Types.Type;
  389.             s: ARRAY 64 OF CHAR; i, j: INTEGER;
  390.     BEGIN
  391.         Oberon.GetSelection(t, beg, end, time);
  392.         IF time >= 0 THEN
  393.             Texts.OpenReader(r, t, beg); Texts.ReadElem(r);
  394.             IF ~r.eot THEN
  395.                 type := Types.TypeOf(r.elem);
  396.                 p := Dialogs.cmdPanel; o := p.NamedObject("type");
  397.                 i := 0; WHILE type.module.name[i] # 0X DO s[i] := type.module.name[i]; INC(i) END; s[i] := "."; INC(i);
  398.                 j := i; WHILE type.name[j - i] # 0X DO s[j] := type.name[j - i]; INC(j) END; s[j] := 0X;
  399.                 o(DialogStaticTexts.Item).SetString(s)
  400.             END
  401.         END
  402.     END GetType;
  403. Syntax10.Scn.Fnt
  404. Syntax10b.Scn.Fnt
  405. FoldElems
  406.     PROCEDURE AddVar* (n: ARRAY OF CHAR; value: LONGREAL);
  407.         VAR var: Var; txt: Texts.Text;
  408.     BEGIN
  409.         NEW(var); var.next := vars; vars := var; COPY(n, var.name); var.value := value;
  410.         p := Dialogs.cmdPanel; o := p.NamedObject("gset"); txt := o(DialogComboBoxes.Item).menu;
  411.         Texts.WriteString(w, n); Texts.Write(w, 0DX);
  412.         Texts.Append(txt, w.buf);
  413.     END AddVar;
  414.     PROCEDURE ShowNumber*;
  415.         VAR r: Texts.Reader; txt: Texts.Text; i: INTEGER; str: ARRAY 32 OF CHAR;
  416.             s: Texts.Scanner;
  417.         PROCEDURE WrHex (n: LONGREAL);
  418.             VAR x, y: LONGINT; i: INTEGER;
  419.                 a: ARRAY 10 OF CHAR;
  420.         BEGIN x := ENTIER(n + eps0);
  421.             i := 0; Texts.Write(w, " ");
  422.             REPEAT y := x MOD 10H;
  423.                 IF y < 10 THEN a[i] := CHR(y + 30H) ELSE a[i] := CHR(y + 37H) END;
  424.                 x := x DIV 10H; INC(i)
  425.             UNTIL i = 8;
  426.             REPEAT DEC(i) UNTIL (i = 0) OR (a[i] # "0");
  427.             IF a[i] >= "A" THEN Texts.Write(w, "0") END;
  428.             WHILE i >= 0 DO Texts.Write(w, a[i]); DEC(i) END;
  429.             Texts.Write(w, "H")
  430.         END WrHex; 
  431.         PROCEDURE WrBin (n: LONGREAL);
  432.             VAR x: LONGINT; i: INTEGER;
  433.                 a: ARRAY 30 OF CHAR;
  434.         BEGIN x := ENTIER(n + eps0);
  435.             i := 0; Texts.Write(w, " ");
  436.             REPEAT
  437.                 a[i] := CHR(ORD("0") + (x MOD 2));
  438.                 x := x DIV 2; INC(i)
  439.             UNTIL i = 28;
  440.             REPEAT DEC(i) UNTIL (i = 0) OR (a[i] # "0");
  441.             WHILE i >= 0 DO Texts.Write(w, a[i]); DEC(i) END;
  442.             Texts.Write(w, "B")
  443.         END WrBin;
  444.         PROCEDURE WrOct (n: LONGREAL);
  445.             VAR x, y: LONGINT; i: INTEGER;
  446.                 a: ARRAY 16 OF CHAR;
  447.         BEGIN x := ENTIER(n + eps0);
  448.             i := 0; Texts.Write(w, " ");
  449.             REPEAT y := x MOD 8;
  450.                 a[i] := CHR(y + 30H);
  451.                 x := x DIV 8; INC(i)
  452.             UNTIL i = 14;
  453.             REPEAT DEC(i) UNTIL (i = 0) OR (a[i] # "0");
  454.             WHILE i >= 0 DO Texts.Write(w, a[i]); DEC(i) END;
  455.             Texts.Write(w, "C")
  456.         END WrOct; 
  457.         PROCEDURE WrInt (n: LONGREAL);
  458.             BEGIN Texts.Write(w, " "); Texts.WriteInt(w, ENTIER(n + eps0), 0) END WrInt; 
  459.         PROCEDURE WrChar (n: LONGREAL);
  460.             VAR ch: CHAR;
  461.             PROCEDURE Ch (ch: CHAR);
  462.                 BEGIN Texts.Write(w, ch) END Ch;
  463.         BEGIN ch := CHR(ENTIER(n + eps0));
  464.             IF (" " <= ch) & (ch < 7FX) OR (80X <= ch) & (ch < 0A0X) THEN Ch(" "); Ch(22X); Ch(ch); Ch(22X)
  465.             ELSE WrHex(ORD(ch))
  466.             END
  467.         END WrChar; 
  468.         PROCEDURE WrReal (n: LONGREAL);
  469.             VAR x: LONGREAL;
  470.         BEGIN
  471.             IF (MIN(LONGINT) <= n) & (n <= MAX(LONGINT)) THEN 
  472.                 x := ABS(n - ENTIER(SHORT(n)));
  473.                 IF x < eps THEN WrInt(n); RETURN END
  474.             END;
  475.             IF (MIN(REAL) <= n) & (n <= MAX(REAL)) THEN x := ABS(n - SHORT(n));
  476.                 IF x < eps THEN
  477.                     IF (-10000 < n) & (n < 10000) THEN Texts.WriteRealFix(w, SHORT(n + eps0), 0, 6)
  478.                     ELSE Texts.WriteReal(w, SHORT(n + eps0), 14)
  479.                     END;
  480.                     RETURN
  481.                 END
  482.             END;
  483.             Texts.WriteLongReal(w, n, 23)
  484.         END WrReal; 
  485.     BEGIN
  486.         p := Dialogs.cmdPanel; IF p = NIL THEN RETURN END;
  487.         o := p.NamedObject("mode"); IF o = NIL THEN RETURN END;
  488.         txt := o(DialogComboBoxes.Item).GetTitle();
  489.         Texts.OpenScanner(s, txt, 0); Texts.Scan(s);
  490.         IF s.s = "hex" THEN WrHex(value)
  491.         ELSIF s.s = "bin" THEN WrBin(value)
  492.         ELSIF s.s = "oct" THEN WrOct(value)
  493.         ELSIF s.s = "dec" THEN WrInt(value)
  494.         ELSIF s.s = "char" THEN WrChar(value)
  495.         ELSE WrReal(value) END;
  496.         txt := TextFrames.Text(""); Texts.Append(txt, w.buf); Texts.OpenReader(r, txt, 0); i := 0;
  497.         REPEAT
  498.             Texts.Read(r, str[i]);
  499.             INC(i)
  500.         UNTIL r.eot;
  501.         str[i - 1] := 0X;
  502.         o := p.NamedObject("t1"); o(DialogStaticTexts.Item).SetString(str)
  503.     END ShowNumber;
  504.     PROCEDURE Clear*;
  505.     BEGIN 
  506.         oldValue := 0; value := 0; commaPos := 10; 
  507.         oldOp := "add";
  508.         newNumber := TRUE;
  509.         ShowNumber;
  510.     END Clear;
  511.     PROCEDURE Reset*;
  512.         VAR txt: Texts.Text;
  513.     BEGIN 
  514.         Clear; 
  515.         p := Dialogs.cmdPanel; IF p = NIL THEN RETURN END;
  516.         o := p.NamedObject("gset");  IF o = NIL THEN RETURN END;
  517.         txt := o(DialogComboBoxes.Item).menu; Texts.Delete(txt, 0, txt.len);
  518.         vars := NIL;
  519.         AddVar("pi", MathL.pi);
  520.         AddVar("e", MathL.e);
  521.         o := p.NamedObject("gset");
  522.         txt := TextFrames.Text(""); o(DialogComboBoxes.Item).SetTitle(txt)
  523.     END Reset;
  524.     PROCEDURE Num*;
  525.         VAR i, base: INTEGER; txt: Texts.Text; s: Texts.Scanner;
  526.     BEGIN
  527.         In.Open; In.Int(i);
  528.         p := Dialogs.cmdPanel; o := p.NamedObject("mode"); txt := o(DialogComboBoxes.Item).GetTitle();
  529.         Texts.OpenScanner(s, txt, 0); Texts.Scan(s);
  530.         IF s.s = "hex" THEN base := 16
  531.         ELSIF s.s = "bin" THEN base := 2
  532.         ELSIF s.s = "oct" THEN base := 8
  533.         ELSE base := 10 END;
  534.         IF newNumber THEN
  535.             newNumber := FALSE;
  536.             value := i
  537.         ELSIF commaPos > 1 THEN
  538.             value := base * value + i
  539.         ELSE
  540.             commaPos := commaPos / base;
  541.             value := value + commaPos * i
  542.         END;
  543.         ShowNumber
  544.     END Num;
  545.     PROCEDURE Comma*; 
  546.         BEGIN commaPos := 1 END Comma;
  547.     PROCEDURE Op*;
  548.         PROCEDURE Invers(): BOOLEAN;
  549.             VAR o: Dialogs.Object;
  550.         BEGIN
  551.             o := p.NamedObject("inv");
  552.             RETURN o(DialogCheckBoxes.Item).on
  553.         END Invers;
  554.         PROCEDURE OpLocal(op: Operation);
  555.         BEGIN
  556.             IF op = "add" THEN value := oldValue + value; oldValue := value
  557.             ELSIF op = "sub" THEN value := oldValue - value; oldValue := value
  558.             ELSIF op = "mult" THEN value := oldValue * value; oldValue := value
  559.             ELSIF op = "div" THEN value := oldValue / value; oldValue := value
  560.             ELSIF op = "sign" THEN value := - value
  561.             ELSIF op = "oneDivX" THEN value := 1 / value
  562.             ELSIF op = "sqr" THEN IF ~Invers() THEN value := value * value ELSE value := MathL.sqrt(value) END
  563.             ELSIF op = "sin" THEN IF ~Invers() THEN value := MathL.sin(value) ELSE value := MoreMathL.arcsin(value) END
  564.             ELSIF op = "cos" THEN IF ~Invers() THEN value := MathL.cos(value) ELSE value := MoreMathL.arccos(value) END
  565.             ELSIF op = "tan" THEN IF ~Invers() THEN value := MoreMathL.tan(value) ELSE value := MathL.arctan(value) END
  566.             ELSIF op = "exp" THEN IF ~Invers() THEN value := MathL.exp(value) ELSE value := MathL.ln(value) END
  567.             ELSE Out.Ln; Out.String("unexpected operator: "); Out.String(op) END;
  568.         END OpLocal;
  569.     BEGIN
  570.         In.Open; 
  571.         In.Name(op);
  572.         IF (op = "add") OR (op = "sub") OR (op = "mult") OR (op = "div") OR (op = "res") THEN 
  573.             OpLocal(oldOp);
  574.             IF op # "=" THEN oldOp := op END
  575.         ELSE OpLocal(op) END;
  576.         commaPos := 10; newNumber := TRUE;
  577.         ShowNumber
  578.     END Op;
  579.     PROCEDURE SetVar*;
  580.         VAR txt: Texts.Text; r: Texts.Reader; i: INTEGER; var: Var;
  581.     BEGIN
  582.         p := Dialogs.cmdPanel; o := p.NamedObject("set"); txt := o(DialogTexts.Item).GetText();
  583.         NEW(var); var.next := NIL; var.value := value;
  584.         Texts.OpenReader(r, txt, 0); i := 0; Texts.Read(r, var.name[i]);
  585.         WHILE ~r.eot DO
  586.             INC(i);
  587.             Texts.Read(r, var.name[i])
  588.         END;
  589.         o := p.NamedObject("gset"); txt := o(DialogComboBoxes.Item).menu;
  590.         Texts.WriteString(w, var.name); Texts.Write(w, 0DX);
  591.         Texts.Append(txt, w.buf);
  592.         var.next := vars; vars := var
  593.     END SetVar;
  594.     PROCEDURE Variable*;
  595.         VAR txt: Texts.Text; cur: Var; s: ARRAY 32 OF CHAR; r: Texts.Reader; i: INTEGER;
  596.     BEGIN
  597.         p := Dialogs.cmdPanel; o := p.NamedObject("gset"); txt := o(DialogComboBoxes.Item).GetTitle();
  598.         Texts.OpenReader(r, txt, 0); i := 0; Texts.Read(r, s[i]);
  599.         WHILE ~r.eot & (s[i] # 0DX) DO
  600.             INC(i);
  601.             Texts.Read(r, s[i])
  602.         END;
  603.         s[i] := 0X;
  604.         cur := vars;
  605.         WHILE (cur # NIL) & (cur.name # s) DO cur := cur.next END;
  606.         IF (cur # NIL) & (cur.name = s) THEN value := cur.value; ShowNumber END
  607.     END Variable;
  608.     PROCEDURE InitCalc*;
  609.         VAR menu, title: Texts.Text;
  610.     BEGIN
  611.         Reset;
  612.         p := Dialogs.cmdPanel; o := p.NamedObject("mode"); menu := o(DialogComboBoxes.Item).menu;
  613.         Texts.WriteString(w, "dec"); Texts.Write(w, 0DX);
  614.         Texts.WriteString(w, "bin"); Texts.Write(w, 0DX);
  615.         Texts.WriteString(w, "oct"); Texts.Write(w, 0DX);
  616.         Texts.WriteString(w, "hex"); Texts.Write(w, 0DX);
  617.         Texts.WriteString(w, "real"); Texts.Write(w, 0DX);
  618.         Texts.WriteString(w, "char"); Texts.Write(w, 0DX);
  619.         Texts.Append(menu, w.buf);
  620.         title := TextFrames.Text(""); Texts.WriteString(w, "dec"); Texts.Append(title, w.buf);
  621.         o(DialogComboBoxes.Item).SetTitle(title)
  622.     END InitCalc;
  623. MODULE MyUI;    
  624.     (* Christoph Steindl 20 Dec 94 - 
  625.     (* Folds.Compile XIn.Mod/s MoreMathL.Mod/s MyUI.Mod/s ~ *)
  626. IMPORT Dialogs, Oberon, Texts, TextFrames, DialogCheckBoxes, DialogRadioButtons, DialogComboBoxes,
  627.         DialogTexts, In, Out, Compiler, Files, MenuViewers, Viewers, Display, StyleElems, ParcElems, Types,
  628.         DialogStaticTexts, MathL, MoreMathL, XIn;
  629. Constants
  630. Types
  631. Global variables
  632. PROCEDURE DoHALT*;
  633.         VAR elem: StyleElem;
  634.     BEGIN 
  635.         elem := styleElems;
  636.         WHILE elem # NIL DO
  637.             Out.Ln; Out.String(elem.styleElem.name);
  638.             elem := elem.next
  639.         END;
  640.         HALT(90) 
  641.     END DoHALT;
  642.     PROCEDURE InitPar;
  643.     BEGIN p := Dialogs.cmdPanel; NEW (par); par.text := TextFrames.Text("")
  644.     END InitPar;
  645.     PROCEDURE Call (s: ARRAY OF CHAR);
  646.     BEGIN Texts.Append (par.text, w.buf); par.frame := Oberon.Par.frame; par.vwr := Oberon.Par.vwr; Oberon.Call (s, par, FALSE, res)
  647.     END Call;
  648.     PROCEDURE StoreLog;
  649.     BEGIN newLog := TextFrames.Text(""); oldLog := Oberon.Log; Oberon.Log := newLog
  650.     END StoreLog;
  651.     PROCEDURE On (s: ARRAY OF CHAR): BOOLEAN;
  652.         VAR o: Dialogs.Object;
  653.     BEGIN
  654.         o := p.NamedObject (s);
  655.         WITH o: DialogRadioButtons.Item DO RETURN o.on
  656.         | o: DialogCheckBoxes.Item DO RETURN o.on
  657.         ELSE RETURN FALSE
  658.         END
  659.     END On;
  660.     PROCEDURE ChangeValue (s: ARRAY OF CHAR; on: BOOLEAN);
  661.         VAR o: Dialogs.Object;
  662.     BEGIN
  663.         o := p.NamedObject (s); 
  664.         IF o # NIL THEN 
  665.             WITH o: DialogRadioButtons.Item DO o.ChangeValue (on)
  666.             | o: DialogCheckBoxes.Item DO o.ChangeValue (on)
  667.             ELSE HALT (99)
  668.             END
  669.         END
  670.     END ChangeValue;
  671.     PROCEDURE Write (s: ARRAY OF CHAR);
  672.     BEGIN IF On (s) THEN Texts.WriteString (w, s) END
  673.     END Write;
  674.     PROCEDURE WriteDefault (s: ARRAY OF CHAR);
  675.     BEGIN IF On (s) THEN Texts.WriteString (w, "default") END
  676.     END WriteDefault;
  677.     PROCEDURE Scan (VAR s: Texts.Scanner; st: ARRAY OF CHAR);
  678.     BEGIN
  679.         Texts.OpenScanner (s, newLog, 0); Texts.Scan (s);
  680.         IF st = "int" THEN
  681.             WHILE (s.class # Texts.Int) & (~s.eot) DO Texts.Scan (s) END
  682.         ELSE
  683.             WHILE (~ s.eot) & (s.class # Texts.Name) & (s.s # st) DO Texts.Scan (s) END
  684.         END
  685.     END Scan;
  686.     PROCEDURE Delete (s: ARRAY OF CHAR; VAR txt: Texts.Text);
  687.         VAR o: Dialogs.Object;
  688.     BEGIN o := p.NamedObject (s); txt := o(DialogTexts.Item).GetText(); Texts.Delete (txt, 0, txt.len)
  689.     END Delete;
  690.     PROCEDURE Save (s: ARRAY OF CHAR);
  691.         VAR txt: Texts.Text; o: Dialogs.Object;
  692.     BEGIN o := p.NamedObject (s); txt := o(DialogTexts.Item).GetText(); Texts.Save (txt, 0, txt.len, w.buf)
  693.     END Save;
  694. Commands for the dialogue Compiler.Dlg
  695. (*TD    PROCEDURE StoreSelection;
  696.         VAR t: Texts.Text; beg, end, time: LONGINT;
  697.     BEGIN
  698.         XIn.GetSelectionViewer(vwr, t, beg, end, time);
  699.         IF (vwr.dsc # NIL) & (vwr.dsc.next # NIL) & (vwr.dsc.next IS TextFrames.Frame) THEN
  700. Out.String("$Storing selbeg and selend");
  701.             selbeg := vwr.dsc.next(TextFrames.Frame).selbeg;
  702.             selend := vwr.dsc.next(TextFrames.Frame).selend
  703.         END
  704.     END StoreSelection;
  705.     PROCEDURE RestoreSelection;
  706.     BEGIN
  707.         IF (vwr.dsc # NIL) & (vwr.dsc.next # NIL) & (vwr.dsc.next IS TextFrames.Frame) THEN
  708. Out.String("$Restoring selbeg and selend");
  709.             vwr.dsc.next(TextFrames.Frame).selbeg := selbeg;
  710.             vwr.dsc.next(TextFrames.Frame).selend := selend;
  711.             vwr.dsc.next(TextFrames.Frame).hasSel := TRUE
  712.         END
  713.     END RestoreSelection;
  714.     PROCEDURE Adjust*;
  715.     BEGIN
  716.         InitPar; Texts.WriteString(w, "adjust "); Write ("block"); Write ("center"); Write ("left"); Write ("right"); 
  717.         Call ("Edit.Set");
  718.     END Adjust;
  719.     PROCEDURE GetAdjust*;
  720.         VAR s: Texts.Scanner; 
  721.     BEGIN
  722.         InitPar; StoreLog; Texts.WriteString(w, "adjust"); Call ("Edit.Get");
  723.         IF res = 0 THEN
  724.             Scan (s, "adjust"); Texts.Scan(s); Texts.Scan(s); ChangeValue (s.s, TRUE)
  725.         END; 
  726.         Oberon.Log := oldLog
  727.     END GetAdjust;
  728.     PROCEDURE Break*;
  729.     BEGIN InitPar; Texts.WriteString(w, "break "); Write ("before"); Write ("normal"); Call ("Edit.Set")
  730.     END Break;
  731.     PROCEDURE GetBreak*;
  732.         VAR s: Texts.Scanner; 
  733.     BEGIN
  734.         InitPar; StoreLog; Texts.WriteString(w, "break"); Call ("Edit.Get");
  735.         IF res = 0 THEN
  736.             Scan (s, "break"); Texts.Scan(s); Texts.Scan(s); ChangeValue (s.s, TRUE)
  737.         END;
  738.         Oberon.Log := oldLog
  739.     END GetBreak;
  740.     PROCEDURE Columns*;
  741.     BEGIN
  742.         InitPar; Texts.WriteString(w, "columns ");
  743.         IF On ("one") THEN Texts.WriteString(w, "1") ELSIF On ("two") THEN Texts.WriteString(w, "2") END;
  744.         Call ("Edit.Set")
  745.     END Columns;
  746.     PROCEDURE GetColumns*;
  747.         VAR s: Texts.Scanner; 
  748.     BEGIN
  749.         InitPar; StoreLog; Texts.WriteString(w, "columns"); Call("Edit.Get");    
  750.         IF res = 0 THEN
  751.             Texts.OpenScanner(s, newLog, 0); Texts.Scan(s);
  752.             WHILE ~s.eot & (s.class # Texts.Int) DO Texts.Scan(s) END;
  753.             IF s.i = 1 THEN ChangeValue ("one", TRUE)
  754.             ELSIF s.i = 2 THEN ChangeValue ("two", TRUE)
  755.             END
  756.         END;
  757.         Oberon.Log := oldLog
  758.     END GetColumns;
  759.     PROCEDURE First*;
  760.         VAR number: INTEGER; 
  761.     BEGIN
  762.         InitPar; Texts.WriteString(w, "first "); WriteDefault ("firstdefault");
  763.         IF On ("firstnumber") THEN In.Open; In.Int(number); Texts.WriteInt(w, number, 0) END;
  764.         Call ("Edit.Set")    
  765.     END First;
  766.     PROCEDURE GetFirst*;
  767.         VAR s: Texts.Scanner; txt: Texts.Text;
  768.     BEGIN
  769.         InitPar; StoreLog; Texts.WriteString(w, "first"); Call("Edit.Get");    
  770.         IF res = 0 THEN
  771.             Scan (s, "int"); Delete ("tfirstnumber", txt);
  772.             IF s.class = Texts.Int THEN
  773.                 Texts.WriteInt(w, s.i, 0); Texts.Append(txt, w.buf); ChangeValue ("firstnumber", TRUE)
  774.             ELSE
  775.                 ChangeValue ("firstnumber", FALSE); ChangeValue ("firstdefault", FALSE);
  776.             END
  777.         END;
  778.         Oberon.Log := oldLog
  779.     END GetFirst;
  780.     PROCEDURE FirstReset*;
  781.     BEGIN p := Dialogs.cmdPanel; ChangeValue ("firstnumber", FALSE)
  782.     END FirstReset;
  783.     PROCEDURE Grid*;
  784.     BEGIN
  785.         InitPar; Texts.WriteString(w, "grid "); 
  786.         IF On ("grid") THEN Texts.WriteString(w, "on") ELSE Texts.WriteString(w, "off") END;
  787.         Call ("Edit.Set")    
  788.     END Grid;
  789.     PROCEDURE GetGrid*;
  790.         VAR s: Texts.Scanner; 
  791.     BEGIN
  792.         InitPar; StoreLog; Texts.WriteString(w, "grid"); 
  793.         Call ("Edit.Get");    
  794.         IF res = 0 THEN
  795.             Texts.OpenScanner(s, newLog, 0); Texts.Scan(s);
  796.             WHILE ~s.eot & (s.s # "on") & (s.s # "off") DO Texts.Scan(s) END;
  797.             IF s.s = "on" THEN ChangeValue("grid", TRUE)
  798.             ELSE ChangeValue("grid", FALSE) END
  799.         END;
  800.         Oberon.Log := oldLog
  801.     END GetGrid;
  802.     PROCEDURE Lead*;
  803.     BEGIN
  804.         InitPar; Texts.WriteString(w, "lead "); WriteDefault ("leaddef");
  805.         IF On ("leadnumber") THEN Save ("tleadnumber") END;
  806.         Call ("Edit.Set")
  807.     END Lead;
  808.     PROCEDURE GetLead*;
  809.         VAR s: Texts.Scanner; txt: Texts.Text;
  810.     BEGIN
  811.         InitPar; StoreLog; Texts.WriteString(w, "lead"); Call ("Edit.Get");
  812.         IF res = 0 THEN
  813.             Scan (s, "int"); Delete ("tleadnumber", txt);
  814.             IF s.class = Texts.Int THEN
  815.                 Texts.WriteInt(w, s.i, 0); Texts.Append(txt, w.buf); ChangeValue ("leadnumber", TRUE)
  816.             ELSE
  817.                 ChangeValue ("leadnumber", FALSE); ChangeValue ("leaddef", FALSE)
  818.             END
  819.         END;
  820.         Oberon.Log := oldLog
  821.     END GetLead;
  822.     PROCEDURE LeadReset*;
  823.     BEGIN p := Dialogs.cmdPanel; ChangeValue ("leadnumber", FALSE);
  824.     END LeadReset;
  825.     PROCEDURE Left*;
  826.         VAR number: INTEGER; 
  827.     BEGIN
  828.         InitPar; Texts.WriteString(w, "left "); WriteDefault ("leftmargindef");
  829.         IF On ("leftmargin") THEN In.Open; In.Int(number); Texts.WriteInt(w, number, 0) END;
  830.         Call ("Edit.Set")    
  831.     END Left;
  832.     PROCEDURE GetLeft*;
  833.         VAR txt: Texts.Text; s: Texts.Scanner; 
  834.     BEGIN
  835.         InitPar; StoreLog; Texts.WriteString(w, "left");
  836.         Call("Edit.Get");    
  837.         IF res = 0 THEN
  838.             Scan (s, "int"); Delete ("tleftmargin", txt);
  839.             IF s.class = Texts.Int THEN
  840.                 Texts.WriteInt(w, s.i, 0); Texts.Append(txt, w.buf); ChangeValue ("leftmargin", TRUE)
  841.             ELSE
  842.                 ChangeValue ("leftmargin", FALSE); ChangeValue ("leftmargindef", FALSE)
  843.             END
  844.         END;
  845.         Oberon.Log := oldLog
  846.     END GetLeft;
  847.     PROCEDURE LeftReset*;
  848.     BEGIN p := Dialogs.cmdPanel; ChangeValue ("leftmargin", FALSE)
  849.     END LeftReset;
  850.     PROCEDURE Right*;
  851.     VAR number: INTEGER;
  852.     BEGIN
  853.         InitPar; Texts.WriteString(w, "right "); WriteDefault ("rightmargindef");
  854.         IF On ("rightmargin") THEN In.Open; In.Int(number); Texts.WriteInt(w, number, 0) END;
  855.         Call ("Edit.Set")    
  856.     END Right;
  857.     PROCEDURE GetRight*;
  858.         VAR txt: Texts.Text; s: Texts.Scanner; 
  859.     BEGIN
  860.         InitPar; StoreLog; Texts.WriteString(w, "right");
  861.         Call ("Edit.Get");
  862.         IF res = 0 THEN
  863.             Scan (s, "int"); Delete ("trightmargin", txt);
  864.             IF s.class = Texts.Int THEN
  865.                 Texts.WriteInt(w, s.i, 0); Texts.Append(txt, w.buf); ChangeValue ("rightmargin", TRUE)
  866.             ELSE
  867.                 ChangeValue ("rightmargin", FALSE); ChangeValue ("rightmargindef", FALSE);
  868.             END
  869.         END;
  870.         Oberon.Log := oldLog
  871.     END GetRight;
  872.     PROCEDURE RightReset*;
  873.     BEGIN p := Dialogs.cmdPanel; ChangeValue ("rightmargin", FALSE)
  874.     END RightReset;
  875.     PROCEDURE Line*; 
  876.     BEGIN
  877.         InitPar; Texts.WriteString (w, "line "); WriteDefault ("linedef");
  878.         IF On ("linenumber") THEN  Save ("tlinenumber") END;            
  879.         Call("Edit.Set")
  880.     END Line;
  881.     PROCEDURE GetLine*;
  882.         VAR txt: Texts.Text; s: Texts.Scanner; 
  883.     BEGIN
  884.         InitPar; StoreLog; Texts.WriteString(w, "line ");
  885.         Call("Edit.Get");    
  886.         IF res = 0 THEN
  887.             Scan (s, "int"); Delete ("tlinenumber", txt);
  888.             IF s.class = Texts.Int THEN
  889.                 Texts.WriteInt(w, s.i, 0); Texts.Append(txt, w.buf); ChangeValue ("linenumber", TRUE)
  890.             ELSE
  891.                 ChangeValue ("linenumber", FALSE); ChangeValue ("linedef", FALSE)
  892.             END
  893.         END;
  894.         Oberon.Log := oldLog
  895.     END GetLine;
  896.     PROCEDURE LineReset*;
  897.     BEGIN p := Dialogs.cmdPanel; ChangeValue ("linenumber", FALSE)
  898.     END LineReset;
  899.     PROCEDURE Tabs*;
  900.         VAR number: INTEGER;
  901.     BEGIN
  902.         InitPar; Texts.WriteString(w, "tabs "); 
  903.         IF On ("every") THEN 
  904.             In.Open; In.Int(number); Texts.WriteString(w, "* "); Texts.WriteInt(w, number, 0);
  905.         ELSE
  906.             IF On ("enum") THEN
  907.                 In.Open; In.Int(number);
  908.                 REPEAT Texts.WriteInt(w, number, 0); Texts.Write(w, " "); In.Int(number) UNTIL ~In.Done;
  909.                 Texts.WriteString(w, " ~")
  910.             END
  911.         END;
  912.         Call ("Edit.Set")
  913.     END Tabs;
  914.     PROCEDURE GetTabs*;
  915.         VAR txt: Texts.Text; s: Texts.Scanner; ch: CHAR; Star: BOOLEAN;
  916.     BEGIN
  917.         InitPar; StoreLog; Texts.WriteString(w, "tabs");
  918.         Call ("Edit.Get");
  919.         IF res = 0 THEN
  920.             Texts.OpenReader(s, newLog, 0); Texts.Read(s, ch);
  921.             WHILE ~s.eot & (ch # "*") DO Texts.Read(s, ch) END;
  922.             Star := ch = "*"; Scan (s, "int");
  923.             IF Star THEN Delete("tevery", txt) ELSE Delete("tenum", txt) END;
  924.             REPEAT 
  925.                 IF s.class = Texts.Int THEN Texts.WriteInt(w, s.i, 0); Texts.Write(w, " ") END; Texts.Scan(s)
  926.             UNTIL s.eot OR (s.class # Texts.Int);
  927.             Texts.Append(txt, w.buf);
  928.             IF Star THEN ChangeValue ("every", TRUE) ELSE ChangeValue ("enum", TRUE) END
  929.         END;
  930.         Oberon.Log := oldLog
  931.     END GetTabs;
  932.     PROCEDURE TabsReset1*;
  933.     BEGIN p := Dialogs.cmdPanel; ChangeValue("every", FALSE)
  934.     END TabsReset1;
  935.     PROCEDURE TabsReset2*;
  936.     BEGIN p := Dialogs.cmdPanel; ChangeValue("enum", FALSE)
  937.     END TabsReset2;
  938.     PROCEDURE Width*;
  939.         VAR number: INTEGER;
  940.     BEGIN
  941.         InitPar; Texts.WriteString(w, "width  ");
  942.         IF On ("widthdef") THEN Texts.WriteString(w, "default") END;
  943.         IF On ("width") THEN In.Open; In.Int(number); Texts.WriteInt(w, number, 0) END;
  944.         Call("Edit.Set")    
  945.     END Width;
  946.     PROCEDURE GetWidth*;
  947.         VAR txt: Texts.Text; s: Texts.Scanner; 
  948.     BEGIN
  949.         InitPar; StoreLog; Texts.WriteString(w, "width");
  950.         Call ("Edit.Get");
  951.         IF res = 0 THEN
  952.             Scan (s, "int"); Delete ("twidth", txt);
  953.             IF s.class = Texts.Int THEN
  954.                 Texts.WriteInt(w, s.i, 0); Texts.Append(txt, w.buf); ChangeValue ("width", TRUE)
  955.             ELSE
  956.                 ChangeValue ("width", FALSE); ChangeValue ("widthdef", FALSE)
  957.             END
  958.         END;
  959.         Oberon.Log := oldLog
  960.     END GetWidth;
  961.     PROCEDURE WidthReset*;
  962.     BEGIN p := Dialogs.cmdPanel; ChangeValue("width", FALSE)
  963.     END WidthReset;
  964.     PROCEDURE ThisStyleElem (VAR n: ARRAY OF CHAR): StyleElems.Parc;
  965.         VAR prev, next: StyleElem; new: StyleElems.Parc;
  966.     BEGIN
  967.         next := styleElems; prev := styleElems;
  968.         WHILE (next # NIL) & (next.styleElem.name # n) DO
  969.             prev := next; next := next.next
  970.         END;
  971.         IF next # NIL THEN
  972.             NEW(new); StyleElems.Copy(next.styleElem, new);
  973. (*            IF prev = next THEN styleElems := next.next ELSE prev.next := next.next END*)
  974.         END;
  975.         RETURN new
  976.     END ThisStyleElem;
  977.     PROCEDURE Style*;
  978.         VAR t, title: Texts.Text; beg, end, time: LONGINT; r: Texts.Reader; elem: Texts.Elem;
  979.             s: Texts.Scanner; styleElem, newElem: StyleElems.Parc; f: TextFrames.Frame;
  980.             PROCEDURE Replace (VAR t: Texts.Text; VAR r: Texts.Reader; styleElem: StyleElems.Parc);
  981.             BEGIN
  982.                 Texts.Delete(t, Texts.Pos(r) - 1, Texts.Pos(r));
  983.                 Texts.WriteElem(w, styleElem);
  984.                 Texts.Insert(t, Texts.Pos(r) - 1, w.buf);
  985.             END Replace;
  986.     BEGIN
  987.         Oberon.GetSelection(t, beg, end, time);
  988.         f := XIn.FocusFrame(TRUE);
  989.         InitPar;
  990.         o := p.NamedObject("styles"); title := o(DialogComboBoxes.Item).GetTitle();
  991.         Texts.OpenScanner(s, title, 0); Texts.Scan(s);
  992.         IF time >= 0 THEN
  993.             Texts.OpenReader(r, t, beg); Texts.ReadElem(r);
  994.             IF (s.class IN {Texts.Name, Texts.String}) & ~r.eot THEN
  995.                 elem := r.elem;
  996.                 WITH elem: StyleElems.Parc DO
  997.                     styleElem := ThisStyleElem(s.s);
  998.                     IF styleElem = NIL THEN
  999.                         Texts.WriteString(w, s.s); Call("StyleElems.Rename") 
  1000.                     ELSE 
  1001.                         Replace(t, r, styleElem) 
  1002.                     END;
  1003.                 | elem: TextFrames.Parc DO
  1004.                     styleElem := ThisStyleElem(s.s);
  1005.                     IF styleElem = NIL THEN
  1006.                         NEW(styleElem); ParcElems.CopyParc(elem, styleElem); 
  1007.                         styleElem.handle := StyleElems.Handle; COPY(s.s, styleElem.name);
  1008.                     END;
  1009.                     Replace(t, r, styleElem)
  1010.                 ELSE
  1011.                 END
  1012.             END;
  1013.         ELSE (* insert a style elem of the selected type at the caret position *)
  1014.             IF (s.class IN {Texts.Name, Texts.String}) & (f # NIL) THEN
  1015.                 styleElem := ThisStyleElem(s.s); NEW(newElem);
  1016.                 StyleElems.Copy(styleElem, newElem);
  1017.                 Texts.WriteElem(w, newElem);
  1018.                 Texts.Insert(f.text, f.carloc.pos, w.buf)                
  1019.             END
  1020.         END
  1021.     END Style;
  1022.     PROCEDURE GetStyles*;
  1023.         VAR t, t2, t3, menu: Texts.Text; beg, end, time: LONGINT;r: Texts.Reader; 
  1024.             PROCEDURE AddStyles (t: Texts.Text);
  1025.                 VAR elem, next: StyleElem;
  1026.             BEGIN
  1027.                 Texts.OpenReader(r, t, 0); Texts.ReadElem(r);
  1028.                 WHILE ~r.eot DO
  1029.                     IF r.elem IS StyleElems.Parc THEN
  1030.                         next := styleElems;
  1031.                         WHILE (next # NIL) & (next.styleElem.name # r.elem(StyleElems.Parc).name) DO
  1032.                             next := next.next
  1033.                         END;
  1034.                         IF next = NIL THEN    (* not yet contained => insert *)
  1035.                             Texts.WriteString(w, r.elem(StyleElems.Parc).name); Texts.Write(w, 0DX);
  1036.                             NEW(elem); elem.styleElem := r.elem(StyleElems.Parc);
  1037.                             elem.next := styleElems; styleElems := elem
  1038.                         END    
  1039.                     END;
  1040.                     Texts.ReadElem(r)
  1041.                 END
  1042.             END AddStyles;
  1043.     BEGIN
  1044.         Oberon.GetSelection(t, beg, end, time);
  1045.         IF time >= 0 THEN
  1046.             p := Dialogs.cmdPanel; o := p.NamedObject ("styles"); 
  1047.             menu := o(DialogComboBoxes.Item).menu; Texts.Delete(menu, 0, menu.len);
  1048.             Texts.OpenReader(r, t, beg); Texts.ReadElem(r);
  1049.             IF ~r.eot & (Texts.Pos(r) <= end) THEN
  1050.                 IF r.elem IS StyleElems.Parc THEN 
  1051.                     t2 := o(DialogComboBoxes.Item).GetTitle(); Texts.Delete(t2, 0, t2.len);
  1052.                     Texts.WriteString(w, r.elem(StyleElems.Parc).name); Texts.Append(t2, w.buf);
  1053. Out.Ln; Out.String("Setting title to: "); Out.String(r.elem(StyleElems.Parc).name);
  1054.                 END
  1055.             END;
  1056.             styleElems := NIL; (* remember the styleElems in the text with the selection and in Styles.Text *)
  1057.             AddStyles(t);
  1058.             t := TextFrames.Text(""); Texts.Open(t, "Styles.Text"); AddStyles(t);
  1059.             Texts.Append(menu, w.buf)
  1060.         END
  1061.     END GetStyles;
  1062.     PROCEDURE GetAll*;
  1063.     BEGIN 
  1064.         GetAdjust; GetBreak; GetColumns; GetFirst; GetGrid; GetLeft; GetRight; 
  1065.         GetWidth; GetTabs; GetLead; GetLine; GetStyles
  1066.     END GetAll;
  1067. Commands for the dialogue Print.Dlg
  1068. Commands for the dialogue Search.Dlg
  1069. Commands for the dialogue Inspector.Dlg
  1070. Commands for the dialogue Calc.Dlg
  1071. BEGIN 
  1072.     doSearch := TRUE; Texts.OpenWriter (w);
  1073.     Reset
  1074. END MyUI.Unload    MyUI.DoHALT
  1075. Dialog.Open Insert.Dlg
  1076. Dialog.Open Compiler.Dlg
  1077. Dialog.Open GetSet.Dlg
  1078. Dialog.Open Print.Dlg
  1079. Dialog.Open Search.Dlg
  1080. Dialog.Open Inspector.Dlg
  1081. Dialog.Open Calc.Dlg
  1082. AsciiCoder.CodeFiles % MyUI.Mod MoreMathL.Mod XIn.Mod Insert.Dlg Compiler.Dlg 
  1083.     GetSet.Dlg Print.Dlg Search.Dlg Inspector.Dlg Calc.Dlg ~
  1084.